import axios from 'axios';
import {ElMessage, ElMessageBox} from 'element-plus';
import {Session} from '/@/utils/storage';
import {tansParams} from './commonUtils'
import JSONBigInt from 'json-bigint/index.js'

// 配置新建一个 axios 实例
const service = axios.create({
    baseURL: /*import.meta.env.VITE_API_URL as any + */import.meta.env.VITE_PUBLIC_PATH as any,
    timeout: 10000,
    headers: {'Content-Type': 'application/json'},

});

// 添加请求拦截器
service.interceptors.request.use(
    (config) => {
        // 在发送请求之前做些什么 token
        if (Session.get('satoken')) {
            (<any>config.headers).common['Authorization'] = `${Session.get('satoken')}`;
        }
        if (config.method === 'get' && config.params) {
            let url = config.url + '?' + tansParams(config.params);
            url = url.slice(0, -1);
            config.params = {};
            config.url = url;
        }
        return config;
    },
    (error) => {
        // 对请求错误做些什么
        return Promise.reject(error);
    }
);

// 添加响应拦截器
service.interceptors.response.use(
    (response) => {

        // 对响应数据做点什么
        const res = response.data;
        if (res.code === 200) {
            return res;
        } else if (res.code && res.code !== 0) {
            // `token` 过期或者账号已在别处登录
            if (res.code === 400) {
                Session.clear(); // 清除浏览器全部临时缓存

                ElMessageBox.confirm(
                    '你已被登出，请重新登录',
                    '警告',
                    {
                        confirmButtonText: '确定',
                        cancelButtonText: '取消',
                        type: 'warning',
                    }
                ).then(() => {
                    window.location.href = '/'
                })
            }
            return Promise.reject(service.interceptors.response);
        } else {

        }
    },
    (error) => {
        // 对响应错误做点什么
        if (error.response.data.code && error.response.data.code === 400) {
            Session.clear(); // 清除浏览器全部临时缓存
            // window.location.href = '/'; // 去登录页
            ElMessageBox.confirm(
                '你已被登出，请重新登录',
                '警告',
                {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning',
                }
            ).then(() => {
                window.location.href = '/'
            })
            return
        } else if (error.message.indexOf('timeout') != -1) {
            ElMessage.error('网络超时');
        } else if (error.message == 'Network Error') {
            ElMessage.error('网络连接错误');
        } else {
            if (error.response.data.msg)
                ElMessage.error(error.response.data.msg);
            else ElMessage.error('接口路径找不到');
        }
        return Promise.reject(error);
    }
);

// 导出 axios 实例
export default service;
